/**
 * @class UniIDUsers uni-id 用户模型
 */
const BaseMod = require('./base');
module.exports = class UniIDUsers extends BaseMod {
    constructor() {
        super();
        this.tableName = 'uni-id-users';
        this.tablePrefix = false;
    }

    /**
     * 获取用户数
     * @param {String} appid DCloud-appid
     * @param {String} platform 平台
     * @param {String} channel 渠道
     * @param {String} version 版本
     * @param {Object} registerTime 注册时间范围 例：{$gte:开始日期时间戳, $lte:结束日期时间戳}
     * @return {Number}
     */
    async getUserCount(appid, platform, channel, version, registerTime) {
        if (!appid || !platform) {
            return false;
        }
        const condition = this.getCondition(appid, platform, channel, version, registerTime);
        let userCount = 0;
        const userCountRes = await this.getCollection(this.tableName).where(condition).count();
        if (userCountRes && userCountRes.total > 0) {
            userCount = userCountRes.total;
        }
        return userCount;
    }

    /**
     * 获取用户编号列表
     * @param {String} appid DCloud-appid
     * @param {String} platform 平台
     * @param {String} channel 渠道
     * @param {String} version 版本
     * @param {Object} registerTime 注册时间范围 例：{$gte:开始日期时间戳, $lte:结束日期时间戳}
     * @return {Array}
     */
    async getUserIds(appid, platform, channel, version, registerTime) {
        if (!appid || !platform) {
            return false;
        }
        const condition = this.getCondition(appid, platform, channel, version, registerTime);
        let uids = [];
        const uidsRes = await this.selectAll(this.tableName, condition, {
            _id: 1,
        });

        for (const u in uidsRes.data) {
            uids.push(uidsRes.data[u]._id);
        }

        return uids;
    }

    /**
     * 获取查询条件
     * @param {String} appid DCloud-appid
     * @param {String} platform 平台
     * @param {String} channel 渠道
     * @param {String} version 版本
     * @param {Object} registerTime 注册时间范围 例：{$gte:开始日期时间戳, $lte:结束日期时间戳}
     */
    getCondition(appid, platform, channel, version, registerTime) {
        let condition = {
            'register_env.appid': appid, //DCloud appid
            'register_env.uni_platform': platform, //平台
            'register_env.channel': channel ? channel : '1001', //渠道或场景值
            'register_env.app_version': version, //应用版本区分
        };

        //原生应用平台
        if (['android', 'ios'].includes(platform)) {
            condition['register_env.uni_platform'] = 'app'; //systemInfo中uniPlatform字段android和ios都用app表示，所以此处查询需要用osName区分一下
            condition['register_env.os_name'] = platform; //系统
        }

        //兼容vue2
        if (channel === '1001') {
            condition['register_env.channel'] = { $in: ['', '1001'] };
        }

        //注册时间
        if (registerTime) {
            condition.register_date = registerTime;
        }

        return condition;
    }
};
